gusucode.com > 《MATLAB图像与视频处理实用案例详解》代码 > 《MATLAB图像与视频处理实用案例详解》代码/第 12 章 基于块匹配的全景图像拼接/Fun_Match.m

    function [W_box, H_box, bdown, MStitch] = Fun_Match(im2, MStitch)

Pwidth = MStitch.Pwidth;
Pheight = MStitch.Pheight; 
W_min = MStitch.W_min; 
W_max = MStitch.W_max;
H_min = MStitch.H_min; 
minval = MStitch.minval; 
im1 = MStitch.im1;
[Fheight, Fwidth] = size(im2);

hw = waitbar(0, '图像匹配进度:', 'Name', '图像匹配……');
w_ind = 64; h_ind = 151;
for w = W_min : W_max
    for h = H_min : Fheight
        imsum = 0; 
        x2 = 1;
        for x1 = Pwidth-w : 5 : Pwidth
            y2 = 1;
            for y1 = Pheight-h+1 : 5 : Pheight
                [x1, y1] = CheckRC(x1, y1, im1);
                [x2, y2] = CheckRC(x2, y2, im2);
                imsum = imsum + abs(im1(y1, x1) - im2(y2, x2));
                y2 = y2 + 5;
            end
            x2 = x2 + 5;
        end
        if imsum*5*5 < minval*w*h
            minval = imsum*5*5/(w*h);
            w_ind = w;
            h_ind = h;
        end
    end
    rt = 0.5*(w - W_min)/(W_max - W_min);
    waitbar(rt, hw, sprintf('图像匹配进度:%i%%', round(rt*100)));
end
W_box = w_ind-1;
H_box = h_ind+1;
bdown = 1;
if H_box < size(im2, 1)
    H_box = size(im2, 1);
end

for w = W_min : W_max
    for h = H_min : Fheight
        imsum = 0; 
        x2 = 1;
        for x1 = Pwidth-w : 5 : Pwidth
            y1 = 1;
            for y2 = Fheight-h+1 : 5 : Fheight
                [x1, y1] = CheckRC(x1, y1, im1);
                [x2, y2] = CheckRC(x2, y2, im2);
                imsum = imsum + abs(im1(y1, x1) - im2(y2, x2));
                y1 = y1 + 5;
            end
            x2 = x2 + 5;
        end
        if imsum*5*5 < minval*w*h
            minval = imsum*5*5/(w*h);
            w_ind = w;
            h_ind = h;
            bdown = 0;
        end
    end
    rt = 0.5 + 0.5*(w - W_min)/(W_max - W_min);
    waitbar(rt, hw, sprintf('图像匹配进度:%i%%', round(rt*100)));
end
MStitch.minval = minval;
delete(hw);